java如何在spring boot中部分回滚数据,错误将被分散
我在事务中创建了表数据的序列,使用如下所示的springboot
、java
、jpa
和hibernate
序列。使用的数据库是Oracle
- 下订单-插入订单明细表
- 处理付款-插入付款信息表
- 错误消息(信息、警告、错误)-插入错误消息表
如果发生任何错误(信息、警告、错误),我将在error_message
表中插入错误消息
如果在处理请求的过程中没有发生错误,我的信息和警告消息将被保存到error_message
。
但是如果有错误,我会从代码中抛出一个错误,以回滚transaction
,它可以工作,但我的error_message
也会回滚
我想要回滚details_table
和payment_info
,但不是error_message
,我想要它们被持久化
我怎样才能达到同样的效果
# 1 楼答案
使用两个不同的事务
默认的事务传播是
REQUIRED
,当在没有事务上下文的情况下调用@Transactional
注释的方法时,将启动一个新的事务,但如果已经有一个事务,则该事务将被加入,最终以单个事务结束。在回滚的情况下,所有操作都将被回滚,因为它们属于同一事务将事务传播更改为
REQUIRES_NEW
,以便始终强制启动新事务(而不是在有新事务时加入)。这将允许您独立于支付信息提交错误消息交易进一步阅读:Understanding PROPAGATION_REQUIRED。确保您还了解异常如何影响事务